home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / MacGzip 1.0 / source / Mac / GzErrors.c < prev    next >
Text File  |  1995-08-31  |  4KB  |  236 lines

  1. /*
  2.  * Errors.c
  3.  *
  4.  * (c)1990-1995 SPDsoft <MacSPD@ivo.cps.unizar.es>
  5.  *
  6.  */
  7. #include <stdio.h>
  8. #include <stdarg.h>
  9. #include <string.h>
  10. #include <errno.h>
  11.  
  12.  
  13. #include "FileTypes.h"
  14. #include "Globals.h"
  15.  
  16. #include "GzErrors.h"
  17. #include "GzPStrings.h"
  18.  
  19.  
  20.  
  21. #define    kErrResType        'Errs'
  22.  
  23. #define    kGenericAskID    152
  24. #define    kGenericNoteID    153
  25. #define    kSysErrAskID    150
  26. #define    kSysErrNoteID    151
  27.  
  28. /*
  29.  * Globals
  30.  */
  31.  
  32. OSErr            err;
  33. Str255            error_fmt;
  34. extern int        errno;
  35.  
  36. int            DoStdIO( void *foo, const char *fmt, ...);
  37. int            DoError( int ErrType, int ErrSever,const char *, ...);
  38. char        *GetErrFmt( short ErrType, short ErrID );
  39. static int _DoError( int ErrType, int ErrLevel, char *StrTmp);
  40.  
  41. /*
  42.  * He sintonizado otro canal
  43.  * he salido a la calle camuflado
  44.  * he dejado de soñar con ovejas eléctricas
  45.  * pero no se si estoy preparado...
  46.  * para todo lo que vendrá después
  47.  */
  48.  
  49. char *GetErrFmt( short ErrType, short ErrID )
  50. {
  51.     GetIndString( error_fmt, ErrType, ErrID);
  52.     p2cstr(error_fmt);
  53.     return( (char *) &error_fmt[0] );
  54. }
  55.  
  56. int DoStdIO( void *foo, const char *fmt, ...)
  57. {
  58.     va_list            vl;
  59.     char            StrTmp[256];
  60.     
  61.     va_start(vl,fmt);
  62.     
  63.         vsprintf(StrTmp, fmt, vl);
  64.     
  65.     va_end(vl);
  66.     
  67.     return (_DoError( NO_ERR, WARN_ERR, StrTmp ));
  68. }
  69.  
  70. int DoError( int ErrType, int ErrLevel, const char *fmt, ...)
  71. {
  72.     va_list            vl;
  73.     char            StrTmp[256];
  74.     
  75.     va_start(vl,fmt);
  76.     
  77.         vsprintf(StrTmp, fmt, vl);
  78.     
  79.     va_end(vl);
  80.     
  81.     return (_DoError( ErrType, ErrLevel, StrTmp ));
  82. }
  83.  
  84.  
  85.  
  86. static int _DoError( int ErrType, int ErrLevel, char *StrTmp)
  87. {
  88.     Str255            s0, s1, s2, s3;
  89.     Handle            myHandle;
  90.     short            alertID;
  91.     
  92.  
  93.     s0[0]=s1[0]=s2[0]=s3[0]=0x00;
  94.  
  95.     switch(ErrType)
  96.     {
  97.         case STDC_ERR:
  98.         
  99.             err = (OSErr) errno;
  100.             
  101.         case SYS_ERR:
  102.                 
  103.             CStrToStr255( s0, "System Error: ");
  104.             CStrToStr255( s1, StrTmp );
  105.             
  106.             if((myHandle=GetResource(kErrResType, (short) err))==nil)
  107.             {
  108.                 NumToString( (long) err, s2 );
  109.             }    
  110.             else
  111.             {
  112.                 PStrCpy(s2, *myHandle );
  113.                 PStrCpy(s3, (*myHandle)+**myHandle+1 );
  114.             }
  115.             
  116.             break;
  117.             
  118.         case PROG_ERR:
  119.  
  120.             CStrToStr255( s0, "Program Error: ");
  121.             CStrToStr255( s2, StrTmp );
  122.  
  123.             break;
  124.             
  125.         case INPUT_ERR:
  126.         
  127.             CStrToStr255( s0, "Input error: " );
  128.             CStrToStr255( s2, StrTmp );
  129.             
  130.             break;
  131.             
  132.         case NO_ERR:
  133.         
  134.             CStrToStr255( s0, "Warning: " );
  135.             CStrToStr255( s2, StrTmp );
  136.             
  137.             break;
  138.             
  139.         default:
  140.         
  141.             CStrToStr255( s0, "What's up?: " );
  142.             CStrToStr255( s1, StrTmp );
  143.             break;
  144.     }
  145.  
  146.     DoNotification();
  147.     
  148.     ParamText(s0, s1, s2, s3);
  149.     
  150.     alertID = ( ( ErrType == SYS_ERR ) || ( ErrType == STDC_ERR ) ) ?
  151.                 kSysErrNoteID : kGenericNoteID;
  152.                 
  153.     switch(ErrLevel)
  154.     {
  155.         case INFO_ERR:
  156.         case WARN_ERR:
  157.         
  158.             StopAlert(alertID, nil);
  159.             return(0);
  160.             break;
  161.             
  162.         case QUIT_ERR:
  163.         case ABORT_ERR:
  164.         
  165.             StopAlert(alertID, nil);
  166.             ExitToShell();
  167.             break;
  168.             
  169.         case ASK_ERR:
  170.         
  171.             return(
  172.             CautionAlert(alertID, nil)
  173.             );
  174.             break;
  175.             
  176.         case END_ERR:
  177.         
  178.             StopAlert(alertID, nil);
  179.             return(1);
  180.             break;
  181.             
  182.         default:
  183.             return(0);
  184.             break;
  185.     }
  186.     return -1; /* just to make MW compiler happy */
  187. }
  188.  
  189. void  DoNotification( void )
  190. {
  191.     static NMRec        myNotification;
  192.     static Handle        myResHand;
  193.     static Str255        myText;
  194.     EventRecord            theEvent;
  195.     
  196.     
  197.     if ( !gApp.InForeground )
  198.     {
  199.         myResHand    = GetResource('SICN', 128);
  200.         
  201.         HNoPurge(myResHand);
  202.         
  203.         myNotification.qType    = nmType;
  204.         myNotification.nmMark    = 1;
  205.         myNotification.nmIcon    = myResHand;
  206.         myNotification.nmSound    = (Handle) -1;
  207.         myNotification.nmStr    = nil;
  208.         myNotification.nmResp    = nil;
  209.         myNotification.nmRefCon    = 0;
  210.         
  211.         NMInstall( (NMRecPtr) &myNotification);
  212.         
  213.         do
  214.         {
  215.             GetNextEvent(everyEvent, &theEvent);
  216.         }
  217.         while (    ( theEvent.what != osEvt ) ||
  218.                 ( ((theEvent.message >> 24) & 0x0ff) != suspendResumeMessage ) ||
  219.                 ( (theEvent.message & resumeFlag) == 0 )
  220.                 );
  221.                 
  222.     /*
  223.      * Since we are skipping events, probably we will miss some
  224.      * update event, but we should finish the process after calling Alert
  225.      * so, who cares?
  226.      */
  227.  
  228.         gApp.InForeground = true;
  229.         
  230.         NMRemove( (NMRecPtr) &myNotification);
  231.         HPurge(myResHand);
  232.         ReleaseResource(myResHand);
  233.     }
  234. }
  235.     
  236.